//package com.leetroll.media.controller;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.google.gson.JsonObject;
//import com.leetroll.api.service.FileService;
//import com.leetroll.api.service.ItemService;
//import com.leetroll.common.bean.ApiResponse;
//import com.leetroll.common.entity.Item;
//import com.leetroll.common.enums.EFileType;
//import com.leetroll.common.utils.AliyunOSSUtil;
//import com.leetroll.media.service.CleanService;
//import com.leetroll.media.utils.ImgDealUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.imageio.ImageIO;
//import java.io.File;
//import java.io.IOException;
//import java.nio.file.Files;
//import java.util.*;
//
///**
// * @Author qdy
// * @Date 2024/3/23 15:14
// * 3d模型文件整理上传阿里云服务器处理
// */
//@RestController
//@RequestMapping("/file")
//@Slf4j
//public class FileDealController1 {
//    private static ArrayList<String> errorResult = new ArrayList<>();
//    private final ItemService itemService;
//    private final FileService fileService;
//    private final CleanService cleanService;
//
//    @Autowired
//    public FileDealController1(ItemService itemService, FileService fileService, CleanService cleanService) {
//        this.fileService = fileService;
//        this.itemService = itemService;
//        this.cleanService = cleanService;
//    }
//
//    @PostMapping("/clean")
//    public ApiResponse<String> cleanAliyunItems(){
//        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("author", "qdy");
//        List<Item> items = itemService.list(queryWrapper);
//        cleanService.clean(items);
//        return ApiResponse.OK("成功！");
//    }
//
//    @PostMapping("/dealDataUpdate")
//    public ApiResponse<String> dealLocal3dModelFile() throws IOException {
//        String inputDir="E:\\leetroll-3d\\3DSky Pro 3D-Models Collection June 2023";
//        File inputFile = new File(inputDir);
//        // 1。读取每一个压缩包， 解压缩找出主图，预览图, 原本的压缩包作为资源附件
//        Map<String, List<Object>> resultMap = loadFileFindAllData(inputFile);
//
//        // 3.上传文件(主图 预览图 附件) 到阿里云bucket
//        assert resultMap != null;
//        for (Map.Entry<String, List<Object>> map : resultMap.entrySet()){
//            String fileName = map.getKey();
//            // 2.读取每一个压缩包，新建item （对应item表），插入数据库
//            Boolean isSuccess = itemService.saveItem(fileName, fileName);
//            if(!isSuccess){
//                continue;
//            }
//            QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
//            queryWrapper.eq("name", fileName);
//            queryWrapper.orderByDesc("create_time");
//            queryWrapper.last("limit 1");
//            Item item = itemService.getOne(queryWrapper);
//            Long itemId = item.getId();
//            List<Object> list = map.getValue();
//
//            String mainPath="item/"+itemId+"/main/";
//            String previewPath="item/"+itemId+"/preview/";
//            String attachmentPath="item/"+itemId+"/attachment/";
//            File mainFile = (File) list.get(0);
//            String mainFileName = mainFile.getName();
//            List<File> previewFile = (List<File>) list.get(1);
////            File attachmentFile = findattachmentFile(fileName);
////            String attachmentFileName = attachmentFile.getName();
//
//            String name=mainFileName.split("\\.")[0];
//            String suffix=mainFileName.split("\\.")[1];
//
//            AliyunOSSUtil.upload(mainPath+mainFileName, Files.newInputStream(mainFile.toPath()));
//            fileService.saveFile(itemId,mainPath,name,suffix,"leetroll-test", EFileType.MAIN.getType(),Long.valueOf(mainFile.length()),suffix);
//            for(File file:previewFile){
//                String previewFileName = file.getName();
//                String previewName=previewFileName.split("\\.")[0];
//                String previewSuffix=previewFileName.split("\\.")[1];
//                fileService.saveFile(itemId,previewPath,previewName,previewSuffix,"leetroll-test", EFileType.PREVIEW.getType(),Long.valueOf(file.length()),previewSuffix);
//                AliyunOSSUtil.upload(previewPath+previewFileName, Files.newInputStream(file.toPath()));
//            }
//// 暂时不上传附件
////            String attachmentName=attachmentFileName.split("\\.")[0];
////            String attachmentSuffix=attachmentFileName.split("\\.")[1];
////            fileService.saveFile(itemId,attachmentPath,attachmentName,attachmentSuffix,"leetroll-test", EFileType.ATTACHMENT.getType(),Long.valueOf(attachmentFile.length()),"3dmax");
////            AliyunOSSUtil.upload(attachmentPath+attachmentFileName, Files.newInputStream(attachmentFile.toPath()));
//        }
//        JsonObject jsonObject = new JsonObject();
//        String errorData = errorResult.isEmpty() ? null : String.join(".", errorResult);
//        jsonObject.addProperty("errorData", errorData);
//        jsonObject.addProperty("success", "成功");
//        return ApiResponse.OK(jsonObject.toString());
//    }
//
//    /**
//     * @Author qdy
//     * @Description  查找压缩包文件
//     * @Date 11:36 2024/3/28
//     * @Param [fileName]
//     * @return java.io.File
//     **/
//    public static File findattachmentFile(String fileName){
//        String dealDir="E:\\leetroll-3d-test";
//        File dirFile = new File(dealDir);
//        File[] allFiles = dirFile.listFiles();
//        assert allFiles != null;
//        for(File file:allFiles){
//            String name = file.getName();
//            name =name.split("\\.")[0];
//            if(name.equals(fileName)){
//                return file;
//            }
//        }
//        return null;
//    }
//
//    /**
//     * @Author qdy
//     * @Description  读取每一个压缩包， 解压缩找出主图，预览图, 原本的压缩包作为资源附件
//     * @Date 16:04 2024/3/23
//     * @Param [file]
//     **/
//    public static Map<String, List<Object>> loadFileFindAllData(File file) throws IOException {
//        //最终返回结果【key（文件夹名称）--value（文件夹内容,主要包含主图和预览图）】
//        HashMap<String, List<Object>> map = new HashMap<>();
//        ArrayList<String> errorResult = new ArrayList<>();
//        // 要检查的文件夹名称
//        String checkFileName = "_RenderPics";
//        if (file == null) {
//            return null;
//        }
//        //获取指定目录下所有的文件
//        File[] topLeverAllFiles = file.listFiles();
//        for (int i = 0; i < Objects.requireNonNull(topLeverAllFiles).length; i++) {
//            ArrayList<Object> result = new ArrayList<>();
//            File topLeverAllFile = topLeverAllFiles[i];
//            String key = topLeverAllFile.getName();
//            //最终子目录
//            File[] secondLeverAllFiles = topLeverAllFile.listFiles();
//            //最终子目录，因为有的有一层有的有多层，一层的需要继续往里面找，多层的表示已经是最里层
//            File[] childFiles;
//            assert secondLeverAllFiles != null;
//            if(secondLeverAllFiles.length==1){
//                childFiles = secondLeverAllFiles[0].listFiles();
//            }else{
//                childFiles=secondLeverAllFiles;
//            }
//            //是否存在预览图目录
//            boolean isExistRenderPics=false;
//            assert childFiles != null;
//            for(File f:childFiles){
//                if (f.isDirectory() && f.getName().equals(checkFileName)) {
//                    isExistRenderPics=true;
//                }
//            }
//            //根目录当前项目名称
//            String topDirName = topLeverAllFile.getName();
//            //主图
//            File mainImg = null;
//            //预览图
//            ArrayList<File> PreviewImg = new ArrayList<>();
//            int size=1;
//
//            //先判断一下有没有和文件名称相同的图片作为主图，如果没有就使用contain包含查询
//            boolean isExitMainImg=false;
//            for (File childFile : childFiles) {
//                if (!isExistRenderPics) {
//                    String curFile = childFile.getName();
//                    String newImgName = curFile.split("\\.")[0];
//                    boolean isImg = curFile.endsWith("png") || curFile.endsWith("jpg") || curFile.endsWith("jpeg");
//                    if (newImgName.equals(topDirName) && (isImg)) {
//                        isExitMainImg = true;
//                    }
//                }
//            }
//            /**
//             * 没有render目录
//             */
//            for (File childFile : childFiles) {
//                //有预览地址目录，直接找对应的目录文件预览图与主图
//                if (isExistRenderPics) {
//                    //输出目录
//                    String outPutPath = childFile.getParentFile().getAbsolutePath();
//                    if (childFile.isDirectory() && childFile.getName().equals(checkFileName)) {
//                        File[] renderFiles = childFile.listFiles();
//                        for (int index = 0; index < Objects.requireNonNull(renderFiles).length; index++) {
//                            String renderFileName = renderFiles[0].getName();
//                            if (renderFileName.endsWith("png") || renderFileName.endsWith("jpg") || renderFileName.endsWith("jpeg")) {
//                                //默认取第一张为主图
//                                if (index == 0) {
//                                    //根据图片大小获取对应的水印
//                                    File watermarkImg = ImgDealUtil.getWatermark(ImageIO.read(renderFiles[index]));
//                                    String path = outPutPath + "\\" + "main.png";
//                                    //给图片添加水印
//                                    File resultImg = ImgDealUtil.manageWatermark(ImageIO.read(renderFiles[0]), ImageIO.read(watermarkImg), renderFileName, path);
//                                    //取第一张为主图
//                                    mainImg = resultImg;
//                                }
//                                //根据图片大小获取对应的水印
//                                File watermarkImg = ImgDealUtil.getWatermark(ImageIO.read(renderFiles[index]));
//                                String path = outPutPath + "\\" + "render" + size + ".png";
//                                //给图片添加水印
//                                File resultImg = ImgDealUtil.manageWatermark(ImageIO.read(renderFiles[index]), ImageIO.read(watermarkImg), renderFileName, path);
//                                size++;
//                                PreviewImg.add(resultImg);
//                            }
//                        }
//                    }
//                /**
//                 * 没有render目录
//                 */
//                } else {
//                    String outPutPath = childFile.getParentFile().getAbsolutePath();
//                    String curFile = childFile.getName();
//                    String newImgName = curFile.split("\\.")[0];
//
//                    //如果当前目录的名称和父级目录名称一样，表示为主图预览图
//                    boolean isImg = curFile.endsWith("png") || curFile.endsWith("jpg") || curFile.endsWith("jpeg");
//                    if (newImgName.equals(topDirName) && (isImg)) {
//                        //根据图片大小获取对应的水印
//                        File watermarkImg = ImgDealUtil.getWatermark(ImageIO.read(childFile));
//                        String path = outPutPath + "\\" + "main.png";
//                        //给图片添加水印
//                        File resultImg = ImgDealUtil.manageWatermark(ImageIO.read(childFile), ImageIO.read(watermarkImg), curFile, path);
//                        //取第一张为主图
//                        mainImg = resultImg;
//                    }
//                    //如果不包含主图，随机找一张预览图作为主图
//                    boolean b = newImgName.contains(topDirName) || newImgName.contains("render") || newImgName.equals("R1") || newImgName.equals("R2") || newImgName.equals("R3");
//                    if (!isExitMainImg && isImg && b) {
//                        File watermarkImg = ImgDealUtil.getWatermark(ImageIO.read(childFile));
//                        String path = outPutPath + "\\" + "main.png";
//                        //给图片添加水印
//                        File resultImg = ImgDealUtil.manageWatermark(ImageIO.read(childFile), ImageIO.read(watermarkImg), curFile, path);
//                        mainImg = resultImg;
//                    }
//                    //预览图
//                    if (isImg && b) {
//                        //根据图片大小获取对应的水印
//                        File watermarkImg = ImgDealUtil.getWatermark(ImageIO.read(childFile));
//                        String path = outPutPath + "\\" + "render" + size + ".png";
//                        //给图片添加水印
//                        File resultImg = ImgDealUtil.manageWatermark(ImageIO.read(childFile), ImageIO.read(watermarkImg), curFile, path);
//                        size++;
//                        PreviewImg.add(resultImg);
//                    }
//                }
//            }
//            //没有主图表示可能是贴图不需要添加
//            if(mainImg!=null) {
//                result.add(mainImg);
//                result.add(PreviewImg);
//                map.put(key, result);
//            }else{
//                errorResult.add(topDirName);
//            }
//        }
//        return map;
//    }
//
//    public static void main(String[] args) throws IOException {
////        String dealDir="E:\\leetroll-3d-tests";
////        File dirFile = new File(dealDir);
////        String dirPath = dirFile.getAbsolutePath();
////        loadFileFindAllData(dirFile);
//
////        File file = findattachmentFile("3D Panel Minimalism Meets Sober");
////        System.out.println(file);
//
//        String mainPath="item"+1+"/main/";
//        String path="E:\\leetroll-3d-tests\\3D Panel Minimalism Meets Sober\\main.png";
//        File mainFile = new File(path);
//        AliyunOSSUtil.upload(mainPath, Files.newInputStream(mainFile.toPath()));
//        System.out.println("成功");
//    }
//}
